
//1358.包含所有三种字符的子字符串数目
class Solution {
    public:
        int numberOfSubstrings(string s) {
            //此题在找到恰好满足条件的数组后，对该数组进行拓展即可，越长越合法
            //采用滑动窗口进行实现
            int n=s.size(),left=0,ret=0;
            unordered_map<char ,int > count;  //存储各个字符出现的次数
            for(int right=0;right<n;right++)
            {
                count[s[right]]++;
                while(count.size()==3)
                {
                    //此时的子字符串满足条件
                    //开始找恰好满足条件的之子字符串
                    if(--count[s[left]]==0) count.erase(s[left]);
                    left++;
    
                    
                }
                //此时已经不满足条件了，但是left的上一次还是满足的
                //所以[left-1,right]区间内是恰好满足的字符串，将left-1向左拓展依旧是满足的
                //所以可以将ans+=left  
                ret+=left;               
            }
            return ret;
        }
    };